package com.cskaoyan.javase._2inner._3local._0introduction;

/**
 * 局部内部类是定义在一个方法或者一个作用域里面的类，
 * 简单来说，将局部内部类看成是局部变量即可，该类的有效范围仅在作用域内部。
 * （这意味着要创建它的对象，必须在作用域内部创建）
 *
 * 从语法和具体使用上看，局部内部类和成员内部类很相似，
 *      有点类似于直接把一个成员内部类放进局部位置，语法是：
 * // 局部位置
 * class Inner{
 *
 * }
 * // 局部位置
 *
 * 特点:
 *      1.修饰符特点
 *          局部内部类就相当于局部变量,它没有访问权限的概念,因为它已经被大括号限制死了作用域
 *          而且也没有static修饰.
 *
 *      2.成员特点
 *          和成员内部类一模一样,没有static声明
 *          但是可以定义不触发类加载的全局常量: 用字面值常量赋值的全局常量
 *
 *      3.继承和实现
 *          非常重要,定义局部内部类多数情况下都是为了继承外部类或者实现外部接口
 *
 * 注意事项:
 *      1.局部内部类是一种比成员位置内部类更加极致封装思想的体现，
 *          成员位置的内部类在成员位置，整个外围类中都是可以访问到它的。
 *          但是局部内部类一旦出了作用域等就不再生效了。
 *      2.局部内部类的使用会显著增加代码层级，导致代码可读性很变差，所以如无必要不要使用局部内部类。
 *      如果你在局部位置碰到问题，希望有一个对象能够解决问题，需要定义一个类，
 *      同时又希望该类不被外界所感知，仅在方法内部生效，就可以使用局部内部类。
 *      当然，局部内部类在某些时候，还能节省一些代码量，会方便一些。
 *
 *
 * @since 09:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

    }
}

class EnclosedClazz {
    public void test2(){

    }
    public void test() {
        // 方法内部定义局部内部类
        class InnerClazz {
            int a;
            private int b = 10;
            // static int c;
            static final int D = 30;
            public void testInner(){

            }
        }
    }
}
